package code;
import java.util.Scanner;
import java.util.ArrayList;

import code.IOperatorDAO.DALException;
	
public class TUI implements IUI
{

	Scanner input = new Scanner(System.in);
 
    // Overrides getLogin, beder først brugeren om ID og derpå password for at tilgå vægten.
    // Gemmer oprID og password i String login som returneres til BaseController.
	public String getLogin()
    {
    	System.out.println("### Login for at benytte hovedmenuen ###\n");
    	int oprID = 0;
    
    	System.out.println("Indtast operatør ID:");
    	
    	boolean isInt = false;
    	while (!isInt)
    	{
    		try
    		{
    			oprID = input.nextInt();
    			isInt = true;
    		} catch (Exception e)
    		{
    			input.nextLine();
    			System.out.println("Ugyldigt operatør id, tast igen:");
    		}
    	}
    
		System.out.println("Indtast password:");
		String password = input.next().trim();
		
		return oprID + "." + password;
	}

	// Overrides printMenu, løber valgmulighederne i variablen options igennem,
	// præsenterer dem for brugeren og returnerer valget til BaseController.
	public int printMenu(ArrayList<String> options, String username) 
	{		
    	System.out.println("### Menu ###");
    	System.out.println(" Bruger: " + username + "\n");
			
		for(String option : options)
		{
			System.out.println(option);	
		}
		
		System.out.println("Hvad vil du foretage dig");
		int choice = 0;
		
		boolean isInt = false; 
		while (!isInt)
		{
			try
			{
				choice = input.nextInt();
				isInt = true;
			} catch (Exception e)
			{
				System.out.println("ugyldigt valg! Tast igen:");
				input.nextLine();
			}
		}
		return choice;		
		
	}

    // Modtager valgmuligheden vægt og returnere netto- og taravægt til BaseController.
	public String receiveWeight() throws DALException {
		System.out.println("### Vægt: ###");
    	
    	System.out.println("Indtast bruttovægt:\n");
		String brutto = input.next();
		
		System.out.println("Indtast taravægt:\n");
		String tara = input.next();
		
		double dBrutto, dTara;
		try {
			 dBrutto = Double.parseDouble(brutto);
			 dTara = Double.parseDouble(tara);
		} catch (Exception e) {
			throw new DALException("Du har angivet ugyldige værdier.");
		}
			
			String vaegt = brutto + "&" + tara;
			return vaegt;
	}
	
	//Laver en dialog til sysadmin, der opretter en ny operatør i systemet. 
	//Sysadmin skal give navn, initialer og cpr-nummer på operatøren 
	public String createOperatorDialog()
	{
		System.out.println("### Opret ny operatør: ####\n");
		
		String name, init, cpr;
		input.nextLine();
		System.out.println("Indtast operatørs navn:");
		name = input.nextLine().trim();
		
		// Valider navn + formatering
		
		System.out.println("Indtast operatørs initialer:");
		init = input.next();
		
		System.out.println("Indtast operatørs cpr. nr.:");
		cpr = input.next();
		
		// Valider cpr nummer
		
		String result = name + "." + init + "." + cpr;
		return result;
	}
	
	//Laver en "new-password"-dialog til operatør
	public String newPasswordDialog(String currentPassword) throws DALException
	{
		System.out.println("### Ændre password: ###\n");
		
		System.out.println("Indtast dit nuværende password:");
		String oldPass = input.next();
		
		System.out.println("Dit nye password skal indeholde:\n");
		System.out.println(" - Mindst 6 karakterer");
		System.out.println(" - Mindst et tal");
		System.out.println(" - Både store og små bogstaver");
		
		String newPass1 = input.next();
		
		System.out.println("Bekræft dit nye password ved at taste det igen ...");
		String newPass2 = input.next();
		
		if (!oldPass.equals(currentPassword))
		{
			throw new DALException("Det indtastede password er ikke korrekt!");
		}
		else if (!newPass1.equals(newPass2))
		{
			throw new DALException("De indtastede passwords er ikke ens!");
		}
		else
		{
			return newPass1;
		}
		
	}

	//Laver en list af operatører 
	public void printAllOperators(ArrayList<OperatorDTO> operatorList){
		System.out.println("Operatørliste:");
		System.out.println("ID   Navn                    Ini        cpr ");
		System.out.println();
		for(OperatorDTO operator : operatorList){
	
			int wantedLength = 20;
			int spaces = wantedLength - operator.getName().length();
			System.out.print(operator.getID() + "   ");
			System.out.print(operator.getName() + "   ");
			for (int j = 0 ; j <= spaces ; j++){
				System.out.print(" ");
			}
			System.out.print(operator.getIni() + "  ");
			int length = 4;
			int gap = length - operator.getIni().length();
			for (int s = 0 ; s <= gap ; s++){
				System.out.print(" ");
			}
			System.out.println(operator.getCpr());
				
		}
		
		System.out.println();
		
	}

	public void weightResult(double result) {
		System.out.println("Nettovægt: " + result);
	}
	
	public void printError(String errorMessage){
		
		System.out.println("Opstået en fejl: ");
		System.out.println(errorMessage);
	
	}
	
	public void printInfo(String infoMessage)
	{
		System.out.println(infoMessage);
	}
	
	public String changeOperatorData()
	{
		int opr = 0;
		boolean isInt = false;
		
		System.out.println("Indtast Operatør ID for den operatør du vil ændre data for:");
		while (!isInt)
		{
			try
			{
				opr = input.nextInt();
				isInt = true;
			} catch (Exception e)
			{
				input.nextLine();
				System.out.println("Ugyldigt operatør ID. Indtast igen:");				
			}
		}
		
		input.nextLine();
		
		System.out.println("Indtast operatørs navn:");
		String newName = input.nextLine();
		
		System.out.println("Indtast operatørs initialer:");
		String newIni = input.nextLine();
		
		System.out.println("Indtast operatørs password:");
		String newPassword = input.nextLine();
		
		return (opr + "&" + newName + "&" + newIni + "&" + newPassword); 
	}
	
	public int deleteOperator()
	{
	
		int delOpr = 0;
		boolean isInt = false;
		System.out.println("Angiv operatør ID'et på den operatør du ønsker at slette:");
		while (!isInt)
		{
			try
			{
				delOpr = input.nextInt();
				isInt = true;
			}
			catch (Exception e)
			{
				printInfo("Ugyldigt operatør nummer!");
				input.nextLine();
			}
		}
		return delOpr;
	}
	
}